﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;
using System.Text.RegularExpressions;
using WebHoiChoMuaBan.Controllers.Utility;
using WebHoiChoMuaBan.Controllers;
using WebHoiChoMuaBan.Controllers.Helpers;

namespace WebHoiChoMuaBan.Models
{
    public partial class Member
    {
        public enum Status { Active = 'A', Locked = 'L' };

        private string _MemPasswordString;
        private bool isEdit;

        public bool IsValid
        {
        
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (!String.IsNullOrEmpty(this._MemPasswordString))
                this._MemPassword = new Binary(Security.MD5(this._MemPasswordString));

            if (String.IsNullOrEmpty(this._MemEmail))
                yield return new RuleViolation("Hãy nhập địa chỉ Email.", "Email");

            Regex reg = new Regex(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$");
            if (!reg.IsMatch(this._MemEmail))
                yield return new RuleViolation("Địa chỉ Email không hợp lệ.", "Email");

            if (!this.isEdit)
            {
                WebHoiChoMuaBanDataContext dataContext = new WebHoiChoMuaBanDataContext();
                int existed = (from mem in dataContext.Members
                               where mem.MemEmail.Equals(this._MemEmail)
                               select mem).Count();
                if (existed > 0)
                    yield return new RuleViolation("Địa chỉ Email đã được sử dụng.", "Email");
            }

            if (String.IsNullOrEmpty(this._MemFullname))
                yield return new RuleViolation("Hãy nhập Tên đầy đủ.", "Fullname");

            reg = new Regex(@"^\+?\d{9,15}$");
            if (!reg.IsMatch(this._MemCellPhone))
                yield return new RuleViolation("Hãy nhập Số đt di động từ 9 đến 15 chữ số.", "CellPhone");

            yield break;
        }

        partial void OnValidate(ChangeAction action)
        {
            if (!IsValid)
                throw new ApplicationException("Hãy nhập đầy đủ thông tin.");
        }

        public bool IsEdit
        {
            get { return isEdit; }
            set { isEdit = value; }
        }

        public string MemPasswordString
        {
            get { return _MemPasswordString; }
            set { _MemPasswordString = value; }
        }
    }
}